iT邦幫忙

2021 iThome 鐵人賽

DAY 24
0

前言
非同步程式設計基本上就是沒有等待或非阻塞程式的設計模型,在Flutter中,非同步是用Future來修飾並執行在event loop內,可有效防止網路對UI繪製的影響。

isolate
(一) 介紹
isolate是透過Flutter Engine的執行緒來實現,而這個執行緒則是由Flutter管理並建立。所有的Dart語言都是在isolate上執行的,應用程式啟動後,開始執行main函式並執行main isolate。isolate有自己的記憶體位址和event loop,但要注意,多個isolate無法共用記憶體,必須透過API通訊才可以。每個isolate包含一個事件迴圈和兩個事件佇列,分別是microTask queue和event queue。

(二)事件迴圈event loop
https://ithelp.ithome.com.tw/upload/images/20211006/20140524JsuGQlLFBp.png
我們用這張圖來解釋程式運作的原理,一共分為四個步驟。
1.啟動App並執行main方法。
2.啟動event loop,並執行佇列中的任務直到microtask queue為空,每次都是依照先進先出的原則處理。
3.確定microtask queue為空後,開始處理event loop,一樣是依照先進先出的原則,直到event queue為空。
4. microtask queue和event queue都為空後,就可退出App。

(三)執行緒模型
前面所提到的Flutter Engine其實是由embedder所負責,embedder是平台引擎移植的中間層程式,總共提供四種Task Runner。
下圖是Flutter Engine的執行架構。
https://ithelp.ithome.com.tw/upload/images/20211006/20140524joO6kDrdfA.jpg

•UI Task Runner:負責執行在執行緒對應到平台的執行緒上,為子執行緒。
•GPU Task Runner:用於執行與裝置GPU相關的呼叫,將UI Task Runner產生的Layer Tree提供的資訊轉成GPU指令。
•IO Task Runner:同樣屬於子執行緒,負責預先處理一些讀取操作,避免卡頓。
•Platform Task Runner:這是Flutter Engine中的主Task Runner,不僅可以處理與Engine的互動,還可以處理來自Android/iOS的互動。

(四)如何建立isolate?
透過isolate.spawn建立一個isolate。
https://ithelp.ithome.com.tw/upload/images/20211006/20140524sSqEUP66d7.png

今天介紹了很多東西,希望對大家有幫助,明天將會介紹路由,敬請期待。

參考資料
橫跨Android及Apple的神話:用Dart語言神啟Flutter大業6.5節
https://ithelp.ithome.com.tw/articles/10233915
https://iter01.com/601637.html
https://iter01.com/160524.html
https://ithelp.ithome.com.tw/articles/10243766
https://iter01.com/441301.html


上一篇
Day 23 dio函數庫
下一篇
Day 25路由
系列文
一起學Flutter,和我變Better!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言